{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "'''\n",
    "【课程3.3.2】  最邻近分类的python实现方法\n",
    "\n",
    "在距离空间里，如果一个样本的最接近的k个邻居里，绝大多数属于某个类别，则该样本也属于这个类别\n",
    "\n",
    "电影分类 / 植物分类\n",
    "\n",
    "'''"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "% matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "   fight  kiss     name     type\n",
      "0      3   104  北京遇上西雅图  Romance\n",
      "1      2   100      喜欢你  Romance\n",
      "2      1    81    疯狂动物城  Romance\n",
      "3    101    10      战狼2   Action\n",
      "4     99     5       力王   Action\n",
      "5     98     2      敢死队   Action\n",
      "-------\n",
      "预测电影类型为: ['Romance']\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<matplotlib.text.Text at 0xb84dc18>"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAigAAAF+CAYAAACoMuHyAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAIABJREFUeJzs3XmcFNW5//HPMwMEkUUEETeUKCjGXaNyMaiJAUFpDRqNqFEwaiKYK1fBq16VxGgcYtQIolmQmKiDXhfcBdG4EK9LmPyIGsiIKLjHQRZ1FGR4fn+c7q7unhmWmenp6unv+/XqV9OnqrtPfWd6+qHqnCpzd0RERETipKzQHRARERHJpQJFREREYkcFioiIiMSOChQRERGJHRUoIiIiEjsqUERERCR2VKCIiIhI7KhAERERkdhRgSIiIiKxE+sCxcy+Vug+iIiISOuLXYFiZr3N7CwzexD4KGfZ9mZ2q5m9aWafmtnzZnZQzjonmNk/zewLM3vZzA5o1Q0QERGRZotdgQI8DlwCdAc65Sy7DFgHjAKOAJYDj5pZNwAzGwhUArcABwPvAI+ZWe7riIiISIxZ3C4WaGY7uvu7ZnYG8Ht375CxrKe712Q83oawl+UYd3/czO4jbNPI5PJuwIfAj9399tbdEhEREWmq2O1Bcfd3N7CsJqfp8+S9Je+PBJ7IWH8VUAUc2pJ9FBERkfyKXYGymUYSipTnzWwrYCvgrZx1lgE7tHbHREREpOmKtkAxs+2B64DL3f1ToHNyUW3OqrVAx9bsm4iIiDRPu0J3oCnMrCvwKPC0u9+YbF6TvO+Qs3pH6hctma/VAxgKvA182bI9FRERadM6ArsAs919eUu+cNEVKMkZOY8TBr/+MGNRDaFI2SnnKTsBf9vASw4F7mzJPoqIiJSYU4G7WvIFi6pAMbOOwMOEcSfHu/u61DJ3dzP7P+C7wJ+S63cDDgSu3cDLvg1wxx13MGDAgDz1vDiMHz+eG264odDdiAVlESiHiLIIlENEWcDChQs57bTTIPld2pJiV6Akx5ZsAWybfLxrctFHwL1Ab+BkYEez1OQd3nP3L4EbgPvM7HngReBKYBFhj0tjvgQYMGAABxxQ2ud069atW8lnkKIsAuUQURaBcogoiywtPkQidgUK4XDL4IzH1cn70YS9IwALcp5zJPCcuz9sZv8JXE440dtTwAiP28leYurDDz8sdBdiQ1kEyiGiLALlEFEW+RW7AsXdj9zA4j9twvNvIZxJVjbTe++9V+guxIayCJRDRFkEyiGiLPKraKcZS8s78MADC92F2FAWgXKIKItAOUSURX6pQJG0U045pdBdiA1lESiHiLIIlENEWeRX7K7F09qSVzueP3/+fA12EpGStWzZMmpqcq8mIgI9e/akT58+DS6rqqpK7Uk60N2rWvJ9YzcGRUREWteyZcsYMGAAtbWNntNSSlinTp1YuHBho0VKvqhAkbTRo0czY8aMQncjFpRFoBwibTmLmpoaamtrdT4oqSd1npOamhoVKFI4Q4YMKXQXYkNZBMohUgpZ6HxQEicaJCtpGvAVURaBcogoC5HWpQJFREREYkcFioiIiMSOChRJmzdvXqG7EBvKIlAOEWUh0rpUoEja5MmTC92F2FAWgXKIKIvidfvtt1NWVpa+tW/fnl122YWLL76YL79s8WvcSQvRLB5JmzlzZqG7EBvKIlAOEWVR3MyMcePGseuuu7J69WoeeeQRfvWrX1FdXc0DDzxQ6O5JA1SgSFqnTp0K3YXYUBaBcogoi+J3wgknMHjwYAAuu+wyDjvsMB566CEWLlyo87/EkA7xiIhI/nz1FSxdCp99VuieZDEzTjzxRABeffXVAvdGGqICRUREWp47TJ4M224Lu+wCW28NZ50Fn35a6J6lpa5F17Vr13TbkiVLOPXUU9l2223p2LEjAwYM4Ne//jWZ161bunQpZWVl/PznP+fOO++kX79+dOnShVGjRvHFF1/w4Ycfctxxx9G1a1d22203pk2blvW+n332Gddccw377rsvXbp0oW/fvlxyySWsW7cuvU5q3Myzzz5LRUUFffr0oVOnThxzzDF89NFH9bblqaee4jvf+Q7dunWjS5cufOtb3+LDDz9ML1+0aBHHHnssXbp0oXv37owaNarB14kTFSiSNmHChEJ3ITaURaAcIsqCsDdk5kw47TQ44wx48EFYv77hdX/5S7j4YlixInru7bfD8ceH4iUGHnvsMb72ta+lLnZHdXU13/zmN3nkkUc46aSTuPTSS+nZsycTJkxg3Lhx9Z4/Z84cfvnLX/LDH/6QgQMHcvfddzNu3DiOPvpoAC688ELWr1/P+eefz1//+tf08x588EGuv/56Bg0axOWXX84ee+xBRUVFgwOxKyoquPfeezn77LP59re/zeOPP855552Xtc4dd9zB0KFDefPNNzn77LO58MILWbNmDf/+97/T2zVo0CAWLlzIhRdeyJlnnsmDDz7IiBEjWizLvHD3kr4BBwA+f/58L3U33XRTobsQG8oiUA6RtpzF/PnzfaN/B7/4wv2II9zBvbw83MB95Ej3devqr9u1a1je0O2ll+q//tq17tde6963r3uXLu7f/a7788+3yPb98Y9/9LKyMr/77rv97bff9qqqKv/xj3/sZWVl/stf/jK93pAhQ7xjx47++uuvZz1/5MiRXlZW5q+99pq7u7/99ttuZr711lv7ihUr3N19/fr1vtdee7mZ+ciRI9PPraqqcjPzcePGpdsWLVqUfl5K//79fcCAAVl9NjM/6KCDfO3aten2b33rW15eXu4rV650d/fly5d7586dfd999023paxL/lyOPvpo32WXXXz16tXpZffcc4+XlZX5o48+usHsNva7kVoOHOAt/P2sPSiSdv755xe6C7GhLALlECn5LG65BZ59Nvy7ri7cAO6/H+6+O3vdt96C1asbf63587Mfu8PJJ8Mll4TnfvopPP00HHEEzJnTIt13d37wgx/Qt29fDjzwQObMmcP999/Pf//3fwOwcuVK5s6dyymnnMKee+6Z9dyLL74Yd+fRRx/Naj/++OPZaqutgDCm5dvf/jZmxtixY9Pr7L///nTu3Jl33nkn3bb77runn7d+/XqWLFnCjjvuyNKlS+v1+7zzzqN9+/bpx8cccwzunl733nvvpba2lmuuuYZu3bplPbe8vJyVK1cyZ84cTjjhBD755BOWLl3K0qVL2WOPPXB35uf+LGJEBYqIiGzcnXc2fGimrAwqK7PbevYEs8Zfq3fv7McvvQQPPJD9+nV14fBRCx5au/rqq7nnnns46aSTePfdd1m+fHl62RtvvIG7s88++9R73h577AFQr4DYcccdsx5vvfXWAPTt27de++qMgu3LL79k0qRJHHDAAXTq1Il+/frxl7/8pd45WcyMXXbZJautV69eAKxatQqA1157DYBDDjmkwW2urq7G3bnhhhvo27dv+rbvvvtiZlmFU9xomrGIiGxcbW3D7evX11+2zTZw3HHw8MPRnhYIxUyPHjB8ePb6c+dCeXn2uhAKln/8I4xj6d69Wd03MwYNGsTgwYM58cQT+d73vsd5553HoEGD2H333VmfHEvTrl39r0VLFltlZdn/py8vL2/wvXLbLadYGzFiBK+88goXXXQR119/Pf379+fSSy/lz3/+80ZfK9UHTxZza9asAeBrX/tag31Jbdc555zDsGHD6i3v06dPg8+LAxUokrZo0aL0/xRKnbIIlEOk5LMYPhyqq+sXEWVlMHRo/fV/97vQ/ve/R8VH9+7wyCOQ+2W65ZaND5wtK4MOHVpmGzLcfPPN9O/fn3HjxvHkk0+m93o0NOV44cKFAPTv37/Z77tkyRKeeuoprr76ai655JJ0+/vvv9+k19t5550BWLBgAYMGDaq3PFWAdO7cmUQi0aT3KBQd4pG0iRMnFroLsaEsAuUQKfksLrwwHLrJ/B99eTn07QvnnFN//W22gb/9DZ58Eq69NhwGeucdOPjg+usmz0dST3k5jBgRCpgWtv3223PRRRfx9NNPc99999GrVy8GDRrEHXfcwaJFi9LruTsVFRV06NCBkSNHNvt9U4dm6jIKvYULF/Lcc8816fW+973vAXD55Zen96ZA2HOydu1att9+e/baay9mzJjBBx98kPXcVOEVV9qDImlTp04tdBdiQ1kEyiFS8llstx288gpcc00YGFteHga2XnopJAd81lNWBkcdFW4bstNOMGUKjB0L7dqFvSnr14f3/M1vWqT73sAemokTJ/L73/+eiy66iGOOOYabbrqJww8/nEMOOYTTTz+dXr16MXv2bF588UWuu+46dthhh2b3Y8CAAfTu3ZuKigpWr15NWVkZf/7zn9lnn33qDVhtqM+57QMGDOCiiy7iuuuuY//99+f4448HwlTmyspK9tlnHyZPnsyIESPYd999Oe200+jduzevvPIKc+bMSRdMcaQ9KJIW52ORrU1ZBMohoiwIhcQtt8BHH8H778MNN4Q9JS3hvPNgwQI4/3w45RS46SZ4/XVIHsJortxxIBAuX3DVVVexbNkyrrnmGvbff39eeOEFjjzySO68804qKipYt24dM2fOZPz48fVer6HX3Nj7d+zYkQcffJC99tqLadOm8eijj3LbbbfxjW98o97rNfb6ue0VFRVMmzaNdu3accMNN3D77bdz8MEHpw//HH300Tz66KP069eP3/72t1x//fUsX76cytzBzTFjjVVopcLMDgDmz58/nwMOOKDQ3RERaXVVVVUceOCB6O+g5NrY70ZqOXCgu1e15HtrD4qIiIjEjgoUSauoqNj4StXV8Pjj8MYb+e9QAW1SFiVAOUSUhUjrUoEiabWNnecA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",
      "text/plain": [
       "<matplotlib.figure.Figure at 0xb44b208>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#  案例一：电影数据分类\n",
    "\n",
    "from sklearn import neighbors  # 导入KNN分类模块\n",
    "import warnings\n",
    "warnings.filterwarnings('ignore') \n",
    "# 不发出警告\n",
    "\n",
    "data = pd.DataFrame({'name':['北京遇上西雅图','喜欢你','疯狂动物城','战狼2','力王','敢死队'],\n",
    "                  'fight':[3,2,1,101,99,98],\n",
    "                  'kiss':[104,100,81,10,5,2],\n",
    "                  'type':['Romance','Romance','Romance','Action','Action','Action']})\n",
    "print(data)\n",
    "print('-------')\n",
    "#  创建数据\n",
    "\n",
    "knn = neighbors.KNeighborsClassifier()   # 取得knn分类器\n",
    "knn.fit(data[['fight','kiss']], data['type'])\n",
    "print('预测电影类型为:', knn.predict([18, 90]))\n",
    "# 加载数据，构建KNN分类模型\n",
    "# 预测未知数据\n",
    "\n",
    "plt.scatter(data[data['type'] == 'Romance']['fight'],data[data['type'] == 'Romance']['kiss'],color = 'r',marker = 'o',label = 'Romance')\n",
    "plt.scatter(data[data['type'] == 'Action']['fight'],data[data['type'] == 'Action']['kiss'],color = 'g',marker = 'o',label = 'Action')\n",
    "plt.grid()\n",
    "plt.legend()\n",
    "plt.scatter(18,90,color = 'r',marker = 'x',label = 'Romance')\n",
    "plt.ylabel('kiss')\n",
    "plt.xlabel('fight')\n",
    "plt.text(18,90,'《你的名字》',color = 'r')\n",
    "# 绘制图表"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "       fight       kiss     type\n",
      "0   9.701249 -20.908418   Action\n",
      "1  19.238881 -53.030875   Action\n",
      "2 -57.176575 -42.409664  Romance\n",
      "3 -33.172493   9.700695  Romance\n",
      "4  24.704976  70.075766  Romance\n",
      "------\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<matplotlib.text.Text at 0xbd56eb8>"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<matplotlib.figure.Figure at 0xbd255c0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 案例一：电影分类\n",
    "# 给随机数据进行模拟预测\n",
    "\n",
    "data2 = pd.DataFrame(np.random.randn(100,2)*50,columns = ['fight','kiss'])\n",
    "data2['type'] = knn.predict(data2)\n",
    "print(data2.head())\n",
    "print('------')\n",
    "# 创建数据，并调用模型预测\n",
    "\n",
    "plt.scatter(data[data['type'] == 'Romance']['fight'],data[data['type'] == 'Romance']['kiss'],color = 'r',marker = 'o',label = 'Romance')\n",
    "plt.scatter(data[data['type'] == 'Action']['fight'],data[data['type'] == 'Action']['kiss'],color = 'g',marker = 'o',label = 'Action')\n",
    "plt.grid()\n",
    "plt.scatter(data2[data2['type'] == 'Romance']['fight'],data2[data2['type'] == 'Romance']['kiss'],color = 'r',marker = 'x',label = 'Romance')\n",
    "plt.scatter(data2[data2['type'] == 'Action']['fight'],data2[data2['type'] == 'Action']['kiss'],color = 'g',marker = 'x',label = 'Action')\n",
    "plt.legend()\n",
    "plt.ylabel('kiss')\n",
    "plt.xlabel('fight')\n",
    "# 绘制图表"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "dict_keys(['target_names', 'target', 'data', 'DESCR', 'feature_names'])\n",
      "数据长度为:150条\n",
      "['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']\n",
      "['setosa' 'versicolor' 'virginica']\n",
      "[[ 5.1  3.5  1.4  0.2]\n",
      " [ 4.9  3.   1.4  0.2]\n",
      " [ 4.7  3.2  1.3  0.2]\n",
      " [ 4.6  3.1  1.5  0.2]\n",
      " [ 5.   3.6  1.4  0.2]]\n"
     ]
    }
   ],
   "source": [
    "# 案例二：植物分类\n",
    "\n",
    "from sklearn import datasets\n",
    "iris = datasets.load_iris()\n",
    "print(iris.keys())\n",
    "print('数据长度为:%i条' % len(iris['data']))\n",
    "# 导入数据\n",
    "\n",
    "print(iris.feature_names)\n",
    "print(iris.target_names)\n",
    "#print(iris.target)\n",
    "print(iris.data[:5])\n",
    "# 150个实例数据\n",
    "# feature_names - 特征分类：萼片长度，萼片宽度，花瓣长度，花瓣宽度  → sepal length, sepal width, petal length, petal width\n",
    "# 目标类别：Iris setosa, Iris versicolor, Iris virginica. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "预测结果为: ['setosa']\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>sepal length (cm)</th>\n",
       "      <th>sepal width (cm)</th>\n",
       "      <th>petal length (cm)</th>\n",
       "      <th>petal width (cm)</th>\n",
       "      <th>target</th>\n",
       "      <th>target_names</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>5.1</td>\n",
       "      <td>3.5</td>\n",
       "      <td>1.4</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0</td>\n",
       "      <td>setosa</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>4.9</td>\n",
       "      <td>3.0</td>\n",
       "      <td>1.4</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0</td>\n",
       "      <td>setosa</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>4.7</td>\n",
       "      <td>3.2</td>\n",
       "      <td>1.3</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0</td>\n",
       "      <td>setosa</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4.6</td>\n",
       "      <td>3.1</td>\n",
       "      <td>1.5</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0</td>\n",
       "      <td>setosa</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5.0</td>\n",
       "      <td>3.6</td>\n",
       "      <td>1.4</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0</td>\n",
       "      <td>setosa</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   sepal length (cm)  sepal width (cm)  petal length (cm)  petal width (cm)  \\\n",
       "0                5.1               3.5                1.4               0.2   \n",
       "1                4.9               3.0                1.4               0.2   \n",
       "2                4.7               3.2                1.3               0.2   \n",
       "3                4.6               3.1                1.5               0.2   \n",
       "4                5.0               3.6                1.4               0.2   \n",
       "\n",
       "   target target_names  \n",
       "0       0       setosa  \n",
       "1       0       setosa  \n",
       "2       0       setosa  \n",
       "3       0       setosa  \n",
       "4       0       setosa  "
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 案例二：植物分类\n",
    "\n",
    "df = pd.DataFrame(iris.data, columns = iris.feature_names)  # 将特征值转为Dataframe\n",
    "df['target'] = iris.target \n",
    "ty = pd.DataFrame({'target':[0,1,2],\n",
    "                  'target_names':iris.target_names})\n",
    "df = pd.merge(df, ty, on = 'target')\n",
    "# 数据转换\n",
    "\n",
    "knn = neighbors.KNeighborsClassifier()   # 取得knn分类器\n",
    "knn.fit(iris.data, df['target_names'])\n",
    "# 建立分类模型\n",
    "\n",
    "pre_data = [[0.1, 0.2, 0.3, 0.4]]\n",
    "print('预测结果为:', knn.predict(pre_data))\n",
    "# 预测结果\n",
    "\n",
    "df.head()\n",
    "# 显示数据"
   ]
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
